package cn.renxuan.service.weather.json;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.google.gson.annotations.SerializedName;
import lombok.Data;

@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class LunDearWeather {

    @Data
    public class Day {
        @SerializedName("time")
        private String time;
        @SerializedName("sunUp")
        private String sunUp;
        @SerializedName("wind")
        private String wind;
        @SerializedName("weather_pic")
        @JsonProperty("weather_pic")
        private String weatherPic;
        @SerializedName("temperature")
        private String temperature;
        @SerializedName("wind_pow")
        @JsonProperty("wind_pow")
        private String windPow;
        @SerializedName("weather")
        private String weather;

        public String getTime() {
            return time;
        }

        public void setTime(String time) {
            this.time = time;
        }

        public String getSunUp() {
            return sunUp;
        }

        public void setSunUp(String sunUp) {
            this.sunUp = sunUp;
        }

        public String getWind() {
            return wind;
        }

        public void setWind(String wind) {
            this.wind = wind;
        }

        public String getWeatherPic() {
            return weatherPic;
        }

        public void setWeatherPic(String weatherPic) {
            this.weatherPic = weatherPic;
        }

        public String getTemperature() {
            return temperature;
        }

        public void setTemperature(String temperature) {
            this.temperature = temperature;
        }

        public String getWindPow() {
            return windPow;
        }

        public void setWindPow(String windPower) {
            this.windPow = windPower;
        }

        public String getWeather() {
            return weather;
        }

        public void setWeather(String weather) {
            this.weather = weather;
        }

    }

    @Data
    public class Night {
        @SerializedName("time")
        private String time; // 时间（"6日夜间"）

        @SerializedName("sunDown")
        private String sunDown; // 日落时间（"日落 19:46"）

        @SerializedName("wind")
        private String wind; // 风向（"南风"）

        @SerializedName("weather_pic")
        @JsonProperty("weather_pic")
        private String weatherPic; // 天气图标代码（"n01"）

        @SerializedName("temperature")
        private int temperature; // 温度（24）

        @SerializedName("wind_pow")
        @JsonProperty("wind_pow")
        private String windPower; // 风力等级（"<3级"）

        @SerializedName("weather")
        private String weather; // 天气状况（"多云"）

        // Getter 和 Setter 方法
        public String getTime() {
            return time;
        }

        public void setTime(String time) {
            this.time = time;
        }

        // 其他 getter/setter 方法...
        // 可以使用 IDE 自动生成或使用 Lombok

        public String getSunDown() {
            return sunDown;
        }

        public void setSunDown(String sunset) {
            this.sunDown = sunset;
        }

        public String getWind() {
            return wind;
        }

        public void setWind(String wind) {
            this.wind = wind;
        }

        public String getWeatherPic() {
            return weatherPic;
        }

        public void setWeatherPic(String weatherIcon) {
            this.weatherPic = weatherIcon;
        }

        public int getTemperature() {
            return temperature;
        }

        public void setTemperature(int temperature) {
            this.temperature = temperature;
        }

        public String getWindPower() {
            return windPower;
        }

        public void setWindPower(String windPower) {
            this.windPower = windPower;
        }

        public String getWeather() {
            return weather;
        }

        public void setWeather(String weather) {
            this.weather = weather;
        }

        @Override
        public String toString() {
            return String.format("夜间天气: %s, 温度: %d℃, 风向: %s%s, %s",
                    weather, temperature, wind, windPower, sunDown);
        }
    }

    @Data
    public class Now {

        // @JsonCreator
        // public Now(@JsonProperty("temp") String tempStr) {
        // // 默认构造函数
        // this.temp = Float.parseFloat(tempStr); // 将字符串转换为浮点数
        // }

        // 使用 @JsonProperty（Jackson）和 @SerializedName（Gson）兼容两种库
        @JsonProperty("WD")
        @SerializedName("WD")
        private String WD; // 风向（如"西南风"）

        @JsonProperty("qy")
        @SerializedName("qy")
        private int qy; // 气压（如"1000"）

        @JsonProperty("rain24h")
        @SerializedName("rain24h")
        private double rain24h; // 24小时降雨量（如"0"）

        @JsonProperty("SD")
        @SerializedName("SD")
        private String SD; // 湿度（如"42%"）

        @JsonProperty("njd")
        @SerializedName("njd")
        private String njd; // 能见度（如"30km"）

        @JsonProperty("rain")
        @SerializedName("rain")
        private double rain; // 当前降雨量（如"0"）

        @JsonProperty("wde")
        @SerializedName("wde")
        private String wde; // 风向英文缩写（如"SW"）

        // @JsonProperty("sd")
        // @SerializedName("sd")
        // private String sd; // 湿度简写（与SD相同，如"42%"）

        @JsonProperty("wse")
        @SerializedName("wse")
        private String wse; // 风速英文（如"10km/h"）

        @JsonProperty("tempf")
        @SerializedName("tempf")
        private String tempf; // 华氏温度（如"92.7"）

        @JsonProperty("aqi")
        @SerializedName("aqi")
        private String aqi; // 空气质量指数（如"45"）

        @JsonProperty("date")
        @SerializedName("date")
        private String date; // 日期（如"07月06日(星期日)"）

        @JsonProperty("cityname")
        @SerializedName("cityname")
        private String cityname; // 城市名（如"北京"）

        @JsonProperty("aqi_pm25")
        @SerializedName("aqi_pm25")
        private String aqi_pm25; // PM2.5指数（如"45"）

        @JsonProperty("weathercode")
        @SerializedName("weathercode")
        private String weathercode; // 天气代码（如"d01"）

        @JsonProperty("WS")
        @SerializedName("WS")
        private String WS; // 风力等级（如"2级"）

        @JsonProperty("temp")
        @SerializedName("temp")
        private float temp; // 温度（如"33.7"）

        @JsonProperty("city")
        @SerializedName("city")
        private String cityCode; // 城市代码（如"101010100"）

        @JsonProperty("weathere")
        @SerializedName("weathere")
        private String weathere; // 天气英文（如"Cloudy"）

        @JsonProperty("weather")
        @SerializedName("weather")
        private String weather; // 天气（如"多云"）

        @JsonProperty("limitnumber")
        @SerializedName("limitnumber")
        private String limitNumber; // 限行信息（如"不限行"）

        @JsonProperty("nameen")
        @SerializedName("nameen")
        private String nameen; // 英文名（如"beijing"）

        @JsonProperty("time")
        @SerializedName("time")
        private String time; // 时间（如"16:20"）

        public String getWD() {
            return WD;
        }

        public void setWD(String windDirection) {
            this.WD = windDirection;
        }

        public int getQy() {
            return qy;
        }

        public void setQy(int pressure) {
            this.qy = pressure;
        }

        public double getRain24h() {
            return rain24h;
        }

        public void setRain24h(String rain24h) {
            this.rain24h = Double.parseDouble(rain24h);
        }

        public String getSD() {
            return SD;
        }

        public void setSD(String humidity) {
            this.SD = humidity;
        }

        public String getNjd() {
            return njd;
        }

        public void setNjd(String visibility) {
            this.njd = visibility;
        }

        public double getRain() {
            return rain;
        }

        public void setRain(String rain) {
            this.rain = Double.parseDouble(rain);
        }

        public String getWde() {
            return wde;
        }

        public void setWde(String windDirectionEnglish) {
            this.wde = windDirectionEnglish;
        }

        // public String getSd() {
        // return sd;
        // }

        // public void setSd(String humidityShort) {
        // this.sd = humidityShort;
        // }

        public String getWse() {
            return wse;
        }

        public void setWse(String windSpeedEnglish) {
            this.wse = windSpeedEnglish;
        }

        public String getTempf() {
            return tempf;
        }

        public void setTempf(String temperatureFahrenheit) {
            this.tempf = temperatureFahrenheit;
        }

        public String getAqi() {
            return aqi;
        }

        public void setAqi(String aqi) {
            this.aqi = aqi;
        }

        public String getDate() {
            return date;
        }

        public void setDate(String date) {
            this.date = date;
        }

        public String getCityname() {
            return cityname;
        }

        public void setCityname(String cityName) {
            this.cityname = cityName;
        }

        public String getAqi_pm25() {
            return aqi_pm25;
        }

        public void setAqi_pm25(String aqiPm25) {
            this.aqi_pm25 = aqiPm25;
        }

        public String getWeathercode() {
            return weathercode;
        }

        public void setWeathercode(String weatherCode) {
            this.weathercode = weatherCode;
        }

        public String getWS() {
            return WS;
        }

        public void setWS(String windScale) {
            this.WS = windScale;
        }

        public float getTemp() {
            return temp;
        }

        public void setTemp(String temperature) {
            // 手动转换
            this.temp = Float.parseFloat(temperature);
        }

        public String getCityCode() {
            return cityCode;
        }

        public void setCityCode(String cityCode) {
            this.cityCode = cityCode;
        }

        public String getWeathere() {
            return weathere;
        }

        public void setWeathere(String weatherEnglish) {
            this.weathere = weatherEnglish;
        }

        public String getWeather() {
            return weather;
        }

        public void setWeather(String weather) {
            this.weather = weather;
        }

        public String getLimitNumber() {
            return limitNumber;
        }

        public void setLimitNumber(String limitNumber) {
            this.limitNumber = limitNumber;
        }

        public String getNameen() {
            return nameen;
        }

        public void setNameen(String nameEnglish) {
            this.nameen = nameEnglish;
        }

        public String getTime() {
            return time;
        }

        public void setTime(String time) {
            this.time = time;
        }

        // Getter 和 Setter 方法（需补充）
        // 可以使用 Lombok 的 @Data 注解自动生成

    }

    @Data
    public class CityInfo {
        @SerializedName("areaCn")
        private String areaCn; // 中文地区名（北京）

        @SerializedName("nationCn")
        private String nationCn; // 中文国家名（中国）

        @SerializedName("areaId")
        private String areaId; // 地区ID（101010100）

        @SerializedName("areaCode")
        private String areaCode; // 地区编码（110000）

        @SerializedName("nationEn")
        private String nationEn; // 英文国家名（china）

        @SerializedName("cityEn")
        private String cityEn; // 英文城市名（beijing）

        @SerializedName("provCn")
        private String provCn; // 中文省份名（北京）

        @SerializedName("provEn")
        private String provEn; // 英文省份名（beijing）

        @SerializedName("areaEn")
        private String areaEn; // 英文地区名（beijing）

        @SerializedName("cityCn")
        private String cityCn; // 中文城市名（北京）

        // Getter 和 Setter 方法
        public String getAreaCn() {
            return areaCn;
        }

        public void setAreaCn(String areaNameChinese) {
            this.areaCn = areaNameChinese;
        }

        // 其他 getter/setter 方法...
        // 可以使用 IDE 自动生成或使用 Lombok

        public String getNationCn() {
            return nationCn;
        }

        public void setNationCn(String nationCn) {
            this.nationCn = nationCn;
        }

        public String getAreaId() {
            return areaId;
        }

        public void setAreaId(String areaId) {
            this.areaId = areaId;
        }

        public String getAreaCode() {
            return areaCode;
        }

        public void setAreaCode(String areaCode) {
            this.areaCode = areaCode;
        }

        public String getNationEn() {
            return nationEn;
        }

        public void setNationEn(String nationEn) {
            this.nationEn = nationEn;
        }

        public String getCityEn() {
            return cityEn;
        }

        public void setCityEn(String cityEn) {
            this.cityEn = cityEn;
        }

        public String getProvCn() {
            return provCn;
        }

        public void setProvCn(String provCn) {
            this.provCn = provCn;
        }

        public String getProvEn() {
            return provEn;
        }

        public void setProvEn(String provEn) {
            this.provEn = provEn;
        }

        public String getAreaEn() {
            return areaEn;
        }

        public void setAreaEn(String areaEn) {
            this.areaEn = areaEn;
        }

        public String getCityCn() {
            return cityCn;
        }

        public void setCityCn(String cityCn) {
            this.cityCn = cityCn;
        }

        @Override
        public String toString() {
            return String.format("地区信息: %s(%s), 国家: %s(%s), 省份: %s(%s)",
                    areaCn, areaEn,
                    nationCn, nationEn,
                    provCn, provEn);
        }
    }

    @SerializedName("day")
    private Day day;

    @SerializedName("night")
    private Night night;

    @SerializedName("cityInfo")
    private CityInfo cityInfo;

    public Day getDay() {
        return day;
    }

    public void setDay(Day day) {
        this.day = day;
    }

    public Night getNight() {
        return night;
    }

    public void setNight(Night night) {
        this.night = night;
    }

    public Now getNow() {
        return now;
    }

    public void setNow(Now now) {
        this.now = now;
    }

    public CityInfo getCityInfo() {
        return cityInfo;
    }

    public void setCityInfo(CityInfo cityInfo) {
        this.cityInfo = cityInfo;
    }

    @SerializedName("now")
    private Now now;

}

// {
// "data": {
// "day": {
// "time": "6日白天",
// "sunUp": "日出 04: 52",
// "wind": "北风",
// "weather_pic": "d00",
// "temperature": "34",
// "wind_pow": "<3级",
// "weather": "晴"
// },
// "night": {
// "time": "6日夜间",
// "sunDown": "日落 19: 46",
// "wind": "南风",
// "weather_pic": "n01",
// "temperature": "24",
// "wind_pow": "<3级",
// "weather": "多云"
// },
// "cityInfo": {
// "areaCn": "北京",
// "nationCn": "中国",
// "areaId": "101010100",
// "areaCode": "110000",
// "nationEn": "china",
// "cityEn": "beijing",
// "provCn": "北京",
// "provEn": "beijing",
// "areaEn": "beijing",
// "cityCn": "北京"
// },
// "now": {
// "WD": "西南风",
// "qy": "1000",
// "rain24h": "0",
// "SD": "42%",
// "njd": "30km",
// "rain": "0",
// "wde": "SW",
// "sd": "42%",
// "wse": "10km\/h",
// "tempf": "92.7",
// "aqi": "45",
// "date": "07月06日(星期日)",
// "cityname": "北京",
// "aqi_pm25": "45",
// "weathercode": "d01",
// "WS": "2级",
// "temp": "33.7",
// "city": "101010100",
// "weathere": "Cloudy",
// "weather": "多云",
// "limitnumber": "不限行",
// "nameen": "beijing",
// "time": "16: 20"
// }
// },
// "desc": "成功",
// "code": "0"
// }